/**
 * 高阶函数 - 函数作为返回值
 */

function makeFn () {
  let msg = 'hello function.';
  return function () {
    console.log(msg);
  }
}

const fn = makeFn();
fn(); // hello function.
makeFn()(); // hello function.


// once
function once (fn) {
  let done = false;

  return function () {
    if (!done) {
      done = true;
      return fn.apply(this, arguments);
    }
  }
}

let pay = once((price) => {
  console.log(`支付了： ${price}元`);
});
pay(5);
pay(6);
pay(7);
// 支付了： 5元